/*! \file
 * \brief Enter a brief description here.
 *
 * Enter a detailed description here. (optional)
 * \author Author (Ivo Wingelaar)
 * \date Date (2011)
 * \version Version (0.0.1)
 * \copyright Copyright (GNU LGPL v3)
 */

#ifndef __LYNX_OS_MANAGER_LINUX_C_HPP_INCLUDED__
#define __LYNX_OS_MANAGER_LINUX_C_HPP_INCLUDED__

#include "LynxOSManager.hpp"

#ifdef _LYNX_LINUX_

namespace Lynx
{

//! Forward declaration.
class WindowManagerLinux_C;

/** class            **/
/** OSManagerLinux_C **/
//! A linux implementation of the OSManager.
class OSManagerLinux_C : public OSManager
{
public:
    /** constructor **/
    /// \param    WindowManagerLinux_C *window
    ///         A pointer to the windowmanager.
    OSManagerLinux_C(WindowManagerLinux_C* window);

    /** default destructor **/
    ~OSManagerLinux_C();

    /** const virtual function **/
    /** get_os_version         **/
    //! Returns a string containing the name and the version of the os.
    /// \return std::string
    ///         A string containing the name and the version of the os.
    /// \param  void
    virtual std::string get_os_version(void) const;

    /** const virtual function **/
    /** copy_to_clipboard      **/
    //! Copies a string the to clipboard.
    /// \return void
    /// \param    const std::string& str
    ///         The string you want to copy to the clipboard.
    virtual void copy_to_clipboard(const std::string& str) const;

    /** const virtual function **/
    /** get_from_clipboard     **/
    //! Returns a string from the clipboard.
    /// \return std::string
    ///         A string from the clipboard.
    /// \param  void
    virtual std::string get_from_clipboard(void) const;

    /** const virtual function  **/
    /** get_processor_speed_mhz **/
    //! Returns the processor speed in MHz.
    /// \return bool
    ///         True if the call succeeded, false otherwise.
    /// \param    uint32_t& mhz
    ///         The speed in mhz.
    virtual bool get_processor_speed_mhz(uint32_t& mhz) const;

    /** const virtual function **/
    /** get_processor_count    **/
    //! Returns the number of processors.
    /// \return bool
    ///         True if the call succeeded, false otherwise.
    /// \param    uint32_t& count
    ///         The number of processors.
    virtual bool get_processor_count(uint32_t& count) const;

    /** const virtual function **/
    /** get_system_memory      **/
    //! Returns a few stats on ram-memory.
    /// \return bool
    ///         True if the call succeeded, false otherwise.
    /// \param    uint32_t* total
    ///         The total amount of ram installed.
    /// \param    uint32_t* available
    ///         The amount of ram available.
    virtual bool get_system_memory(uint32_t* total,
                                   uint32_t* available) const;

private:
    //! A pointer to the linux windowmanager.
    WindowManagerLinux_C* mWindow;
    //! A string containing the operating system version.
    std::string mOperatingSystem;
};

} // namespace Lynx

#endif // _LYNX_LINUX_

#endif // __LYNX_OS_MANAGER_LINUX_C_HPP_INCLUDED__

